package ManagedBeans;

import ComponenteDatos.ClienteFacadeLocal;
import ComponenteEntidad.Cliente;
import ComponenteDatos.PersonaFacadeLocal;
import ComponenteEntidad.Empleado;
import ComponenteEntidad.Persona;
import ComponenteDatos.DetalleclienteFacadeLocal;
import ComponenteEntidad.Detallecliente;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import org.primefaces.event.CellEditEvent;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

@ManagedBean
@SessionScoped
public class ManagedBeanCliente implements Serializable {

    @EJB
    private DetalleclienteFacadeLocal detalleclienteFacade;
    @EJB
    private ClienteFacadeLocal ClienteFacade;
    @EJB
    private PersonaFacadeLocal PersonaFacade;
    private Cliente objetoCliente;
    private Cliente objetoClientePersona;
    private Cliente objetoClienteCrear;
    private Cliente objetoClienteEditar;
    private Persona objetoPersona;
    private Persona objetoPersonaCrear;
    private Persona objetoPersonaCrear2;
    private Detallecliente objetoDetallecliente;
    private Detallecliente objetoDetalleclienteCrear;
    private Detallecliente objetoDetalleclienteEditar;
    private List<Detallecliente> listaDetalleclientes;
    private List<Detallecliente> listaDetalleclientesEditando;
    private List<Cliente> listaClienteEditando;
    private List<Cliente> lista;
    private List<Persona> listaNatural;
    private List<SelectItem> objetoItems = new LinkedList<SelectItem>();
    private List<SelectItem> objetoItems2 = new LinkedList<SelectItem>();
    private List<SelectItem> objetoItems3 = new LinkedList<SelectItem>();
    private HashMap<Integer, Cliente> myobjeto = new HashMap<Integer, Cliente>();
    private HashMap<Integer, Cliente> myobjeto2 = new HashMap<Integer, Cliente>();
    private HashMap<Integer, Cliente> myobjeto3 = new HashMap<Integer, Cliente>();
    private boolean sindni;
    public List<Cliente> lista_clientesTotales = new LinkedList<Cliente>();
    private Boolean personaNatural = null;
    private Boolean personaNatural2 = null;

    public ManagedBeanCliente() {
        objetoCliente = new Cliente();
        objetoCliente.setIdCliente(1);
        lista = new LinkedList<Cliente>();
        listaNatural = new LinkedList<Persona>();
        objetoClienteCrear = new Cliente();
        objetoClienteCrear.setCliRUC("--");
        objetoClienteCrear.setCliRazSoc("--");
        objetoClienteCrear.setCliDireccionFiscal("--");
        objetoClienteCrear.setPerEstado(true);
        objetoClienteCrear.setPerEmpresaAsociada(true);
        objetoClienteEditar = new Cliente();
        listaClienteEditando = new LinkedList<Cliente>();

        objetoPersona = new Persona();
        objetoPersonaCrear = new Persona();

        objetoPersonaCrear.setPerApellidos("");
        objetoPersonaCrear.setPerCel("");
        objetoPersonaCrear.setPerDNI("");
        objetoPersonaCrear.setPerDireccion("");
        objetoPersonaCrear.setPerEstado(true);
        objetoPersonaCrear.setPerFechaCreacion(new Date());
        objetoPersonaCrear.setPerFechaNac(new Date());
        objetoPersonaCrear.setPerNombres("");
        objetoPersonaCrear.setPerTelf("");

        objetoPersonaCrear2 = new Persona();
        objetoPersonaCrear2.setPerCel("");
        objetoPersonaCrear2.setPerDNI("");
        objetoPersonaCrear2.setPerDireccion("");
        objetoPersonaCrear2.setPerEstado(true);
        objetoPersonaCrear2.setPerFechaCreacion(new Date());
        objetoPersonaCrear2.setPerFechaNac(new Date());
        objetoPersonaCrear2.setPerNombres("");
        objetoPersonaCrear2.setPerTelf("");

        objetoDetallecliente = new Detallecliente();
        listaDetalleclientes = new LinkedList<Detallecliente>();
        listaDetalleclientesEditando = new LinkedList<Detallecliente>();
        objetoDetallecliente.setDcliCelular("");
        objetoDetallecliente.setDcliDireccion("");
        objetoDetallecliente.setDcliEmail("");
        objetoDetallecliente.setDcliTelefono("");
        objetoDetallecliente.setDcliEstado(true);
        objetoDetalleclienteEditar = new Detallecliente();
        objetoDetalleclienteCrear = new Detallecliente();

        objetoDetalleclienteCrear.setDcliDireccion("");
        objetoDetalleclienteCrear.setDcliCelular("");
        objetoDetalleclienteCrear.setDcliEmail("");
        objetoDetalleclienteCrear.setDcliTelefono("");


        objetoClientePersona = new Cliente();
        sindni = false;
    }

    public Cliente getObjetoClientePersona() {
        return objetoClientePersona;
    }

    public void setObjetoClientePersona(Cliente objetoClientePersona) {
        this.objetoClientePersona = objetoClientePersona;
    }

    public Boolean getPersonaNatural() {
        return personaNatural;
    }

    public void setPersonaNatural(Boolean personaNatural) {
        this.personaNatural = personaNatural;
    }

    public Boolean getPersonaNatural2() {
        return personaNatural2;
    }

    public void setPersonaNatural2(Boolean personaNatural2) {
        this.personaNatural2 = personaNatural2;
    }

    public Cliente getObjetoClienteEditar() {
        return objetoClienteEditar;
    }

    public void setObjetoClienteEditar(Cliente objetoClienteEditar) {
        this.objetoClienteEditar = objetoClienteEditar;
    }

    public List<Cliente> getListaClienteEditando() {
        return listaClienteEditando;
    }

    public void setListaClienteEditando(List<Cliente> listaClienteEditando) {
        this.listaClienteEditando = listaClienteEditando;
    }

    public Detallecliente getObjetoDetalleclienteCrear() {
        return objetoDetalleclienteCrear;
    }

    public void setObjetoDetalleclienteCrear(Detallecliente objetoDetalleclienteCrear) {
        this.objetoDetalleclienteCrear = objetoDetalleclienteCrear;
    }

    public Detallecliente getObjetoDetalleclienteEditar() {
        return objetoDetalleclienteEditar;
    }

    public void setObjetoDetalleclienteEditar(Detallecliente objetoDetalleclienteEditar) {
        this.objetoDetalleclienteEditar = objetoDetalleclienteEditar;
    }

    public boolean isSindni() {
        return sindni;
    }

    public void setSindni(boolean sindni) {
        this.sindni = sindni;
    }

    public List<SelectItem> getObjetoItems() {
        lista = new ArrayList<Cliente>();
        objetoItems = new LinkedList<SelectItem>();
        lista = ClienteFacade.findAll();
        for (Cliente p : lista) {
            if (p.getPerEstado() == true) {
                myobjeto.put(p.getIdCliente(), p);
                objetoItems.add(new SelectItem(p, p.getCliRUC()));
            }
        }
        return objetoItems;
    }

    public List<SelectItem> getObjetoItems2() {
        lista = new ArrayList<Cliente>();
        objetoItems2 = new LinkedList<SelectItem>();
        lista = ClienteFacade.findAll();
        for (Cliente p : lista) {
            if (p.getPerEstado() == true) {
                myobjeto2.put(p.getIdCliente(), p);
                objetoItems2.add(new SelectItem(p, p.getCliRUC()));
            }
        }
        return objetoItems2;
    }

    public void setObjetoItems2(List<SelectItem> objetoItems2) {
        this.objetoItems2 = objetoItems2;
    }

    public List<SelectItem> getObjetoItems3() {
        lista = new ArrayList<Cliente>();
        objetoItems3 = new LinkedList<SelectItem>();
        lista = ClienteFacade.findAll();
        for (Cliente p : lista) {
            if (p.getPerEstado() == true) {
                myobjeto3.put(p.getIdCliente(), p);
                objetoItems3.add(new SelectItem(p, p.getCliRUC()));
            }
        }
        return objetoItems3;
    }

    public void setObjetoItems3(List<SelectItem> objetoItems3) {
        this.objetoItems3 = objetoItems3;
    }
    

    public void filtrarClientes() {
        System.out.println("nos llega esto" + personaNatural);


        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
        System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
            System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems = new LinkedList<SelectItem>();
        myobjeto = new HashMap<Integer, Cliente>();
        for (Cliente p : lista_clientesTotales) {
            if (p.getPerEstado() == true) {


                if (personaNatural == Boolean.TRUE) {
                    if (p.getPersona().getIdPersona().equals(1) == false) {
                        // SOLO PERSONAS
                        myobjeto.put(p.getIdCliente(), p);
                        objetoItems.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));
                        // System.out.println("hay :"+objetoItems.size()+" Personas");
                    }
                } else {
                    // SOLO EMPRESAS
                    myobjeto.put(p.getIdCliente(), p);
                    objetoItems.add(new SelectItem(p, p.getCliRUC() + " " + p.getCliRazSoc()));

                }

            }
        }

        if (personaNatural == Boolean.TRUE) {
            System.out.println("hay :" + objetoItems.size() + "Personas");
        } else {
            // SOLO EMPRESAS
            System.out.println("hay :" + objetoItems.size() + "Empresas");
        }


        System.out.println("Salio muy bien");
    }

    /*
     public void filtrarClientes() {
     System.out.println("nos llega esto" + personaNatural);
     lista = new ArrayList<Cliente>();
     objetoItems = new LinkedList<SelectItem>();
     lista = ClienteFacade.findAll();
     myobjeto = new HashMap<Integer, Cliente>();
     for (Cliente p : lista) {
     if (p.getPerEstado() == true) {
     myobjeto.put(p.getIdCliente(), p);
                
     if(personaNatural==Boolean.TRUE){
     if(p.getPersona().getIdPersona().equals(1)==false){
     objetoItems.add(new SelectItem(p,p.getPersona().getPerDNI()+" "+p.getPersona().getPerNombres()+ " " +p.getPersona().getPerApellidos()));
                
     }
     }else{
     objetoItems.add(new SelectItem(p,p.getCliRUC()+" "+p.getCliRazSoc()));
                    
     }
                
     }
     }
     System.out.println("Salio muy bien");
     }*/
    public List<Cliente> completar_filtrado_Clientes(String nombre) {
        List<Cliente> lista_clientes = new LinkedList<Cliente>();
        //    System.out.println("si entro con "+nombre +" "+ lista_clientesTotales.size()+ " clientes" );
        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
     //   System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
        //    System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems = new LinkedList<SelectItem>();
        myobjeto = new HashMap<Integer, Cliente>();

        for (Cliente p : lista_clientesTotales) {
            //    System.out.println(p.getPersona().getPerNombres()+"yury " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);
        //    System.out.println("tmr" + p);
            if (p.getCliRUC() != null) {
            if (personaNatural == Boolean.TRUE) {
                //                  System.out.println(p.getPersona().getPerNombres()+" PERSONAS  DNI" +p.getPersona().getPerDNI()  +" VS "+nombre);

                if (p.getPersona().getIdPersona().equals(1) == false) {
                    // SOLO PERSONAS
//                    System.out.println("mmmmmm");
                    String nombapell=p.getPersona().getPerApellidos()+" "+p.getPersona().getPerNombres();
//                     System.out.println("mmmmmm");
                    if ((p.getPersona().getPerDNI().toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1 || nombapell.toUpperCase().indexOf(nombre.toUpperCase().trim())!= -1) && p.getCliRUC().length() < 3 && p.getPersona().getPerEstado() != false) {
                        lista_clientes.add(p);
                        myobjeto.put(p.getIdCliente(), p);
                        objetoItems.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));

                    }
                //    System.out.println("Si agrego Personas ! Existen :" + lista_clientes.size());
                }
            } else {
                //  System.out.println(p.getPersona().getPerNombres()+"EMPRESAS " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);
//                System.out.println("mmmmmm");
                    String nombapell=p.getPersona().getPerApellidos()+" "+p.getPersona().getPerNombres();
//                     System.out.println("mmmmmm");
                // SOLO EMPRESAS
                if (((p.getPersona().getPerDNI().indexOf(nombre.toUpperCase().trim()) != -1 || nombapell.toUpperCase().indexOf(nombre.toUpperCase().trim())!= -1) || (p.getCliRUC().toUpperCase().indexOf(nombre.toUpperCase().trim())) != -1) && p.getCliRUC().length() > 3 && p.getPerEstado() != false) {
                    lista_clientes.add(p);

                    myobjeto.put(p.getIdCliente(), p);
                    objetoItems.add(new SelectItem(p, p.getCliRUC() + " " + p.getCliRazSoc()));

                }
              //  System.out.println("Si agrego EMPRESAS ! Existen :" + lista_clientes.size());
            }
 }

        }




        return lista_clientes;
    }

    public List<Cliente> completar_filtrado_ClientesPersonas(String nombre) {
        List<Cliente> lista_clientes = new LinkedList<Cliente>();
        //    System.out.println("si entro con "+nombre +" "+ lista_clientesTotales.size()+ " clientes" );
        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
        System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
            System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems2 = new LinkedList<SelectItem>();
        myobjeto2 = new HashMap<Integer, Cliente>();

        for (Cliente p : lista_clientesTotales) {
            //    System.out.println(p.getPersona().getPerNombres()+"yury " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);
            System.out.println("tmr" + p);

            //                  System.out.println(p.getPersona().getPerNombres()+" PERSONAS  DNI" +p.getPersona().getPerDNI()  +" VS "+nombre);

            if (p.getPersona().getIdPersona().equals(1) == false) {
                // SOLO PERSONAS
                String nomap = p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos();
                if ((p.getPersona().getPerDNI().toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1 || nomap.toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1) && p.getCliRUC().length() < 3) {
                    lista_clientes.add(p);
                    myobjeto2.put(p.getIdCliente(), p);
                    objetoItems2.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));

                }
                System.out.println("Si agrego Personas ! Existen :" + lista_clientes.size());
            }



        }




        return lista_clientes;
    }

    public List<Cliente> completar_filtrado_ClientesPersonas2(String nombre) {//filtra por Nombres y Apellidos
        List<Cliente> lista_clientes = new LinkedList<Cliente>();
        //    System.out.println("si entro con "+nombre +" "+ lista_clientesTotales.size()+ " clientes" );
        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
        System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
            System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems2 = new LinkedList<SelectItem>();
        myobjeto2 = new HashMap<Integer, Cliente>();

        for (Cliente p : lista_clientesTotales) {
            //    System.out.println(p.getPersona().getPerNombres()+"yury " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);
            System.out.println("tmr" + p);

            //                  System.out.println(p.getPersona().getPerNombres()+" PERSONAS  DNI" +p.getPersona().getPerDNI()  +" VS "+nombre);

            if (p.getPersona().getIdPersona().equals(1) == false) {
                // SOLO PERSONAS
                String nomap = p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos();
                if ((p.getPersona().getPerDNI().indexOf(nombre.toUpperCase().trim()) != -1 || nomap.toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1) && p.getCliRUC().length() < 3) {
                    lista_clientes.add(p);
                    myobjeto2.put(p.getIdCliente(), p);
                    objetoItems2.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));

                }
                System.out.println("Si agrego Personas ! Existen :" + lista_clientes.size());
            }



        }




        return lista_clientes;
    }

    public void asignandoclienteEMPRESA(ManagedBeanVenta v) {
        System.out.println("el tipo es : " + objetoClientePersona);
        System.out.println("llego");
        v.getObjetoVentas().setCliente(objetoClientePersona);
        System.out.println("bien");
    }
    /* 
     public List<Cliente> completar_filtrado_Clientes(String nombre) {
     List<Cliente> lista_clientes = new LinkedList<Cliente>();
     List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
     // vamos a comparar la lista antes de leerla
     lista_clientesTemp=ClienteFacade.findAll();
     System.out.println("jojo1"+lista_clientesTotales.size()+ " con el nombre " +nombre);
     if(lista_clientesTotales.size()<1){
     lista_clientesTotales=ClienteFacade.findAll();
     }
     if(lista_clientesTotales.size()<lista_clientesTemp.size())
     {
     System.out.println("Por AQUI");
     lista_clientesTotales=new LinkedList<Cliente>();
     lista_clientesTotales=lista_clientesTemp;
     System.out.println("jojo2"+lista_clientesTotales.size()+ " con el nombre " +nombre);
     for(Cliente p : lista_clientesTotales){
     //   myobjeto.put(p.getIdCliente(), p);
                 
     if (p.getCliRUC().toUpperCase().indexOf(nombre.toUpperCase())!=-1){
     lista_clientes.add(p);
     System.out.println("Si agrego ! Existen :"+lista_clientes.size());
     }
     }
     }   else  {
      
     for(Cliente p : lista_clientesTotales){
     //   myobjeto.put(p.getIdCliente(), p);
                 
     if (p.getCliRUC().toUpperCase().indexOf(nombre.toUpperCase().trim())!=-1){
     lista_clientes.add(p);
     System.out.println("Si agrego2 !Existen :"+lista_clientes.size());
     }
     }
     }   
     return lista_clientes;
     }*/

    public List<SelectItem> getObjetoItemsBoleto() {
        System.out.println("por items :" + personaNatural);
        //  System.out.println("yeah" + objetoItems);
        if (objetoItems.size() < 1) {
            lista = new ArrayList<Cliente>();
            objetoItems = new LinkedList<SelectItem>();
            lista = ClienteFacade.findAll();
            for (Cliente p : lista) {
                if (p.getPerEstado() == true) {
                    myobjeto.put(p.getIdCliente(), p);

                    if (personaNatural == Boolean.TRUE) {
                        if (p.getPersona().getIdPersona().equals(1) == false) {
                            objetoItems.add(new SelectItem(p, "PERSONA" + p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));

                        }
                    }

                }
            }
        }
        return objetoItems;
    }

    public List<Detallecliente> getListaDetalleclientesEditando() {
        return listaDetalleclientesEditando;
    }

    public void setListaDetalleclientesEditando(List<Detallecliente> listaDetalleclientesEditando) {
        this.listaDetalleclientesEditando = listaDetalleclientesEditando;
    }

    public void setObjetoItems(List<SelectItem> objetoItems) {
        this.objetoItems = objetoItems;
    }

    public Detallecliente getObjetoDetallecliente() {
        return objetoDetallecliente;
    }

    public void setObjetoDetallecliente(Detallecliente objetoDetallecliente) {
        this.objetoDetallecliente = objetoDetallecliente;
    }

    public List<Detallecliente> getListaDetalleclientes() {

        List<Detallecliente> listaTemporal2 = new LinkedList<Detallecliente>();
        if (listaDetalleclientes != null) {
            for (int i = listaDetalleclientes.size() - 1; i >= 0; i--) {
                listaTemporal2.add(listaDetalleclientes.get(i));
            }
        }
        return listaTemporal2;
    }

    public List<Detallecliente> getListaDetalleclientesEditar() {
        //objetoCliente = ClienteFacade.find(objetoCliente.getIdCliente());

        listaDetalleclientesEditando = new LinkedList<Detallecliente>();
        if (objetoCliente !=null && objetoCliente.getDetalleclienteList() != null) {
            List<Detallecliente> lista2 = new LinkedList<Detallecliente>();
            lista2 = objetoCliente.getDetalleclienteList();
            for (int i = lista2.size() - 1; i >= 0; i--) {
                if (lista2.get(i).getDcliEstado() == true) {
                    listaDetalleclientesEditando.add(lista2.get(i));
                }
            }
        }
        return listaDetalleclientesEditando;
    }

    public List<Cliente> getListaClientesEditar() {
//        objetoCliente = ClienteFacade.find(objetoCliente.getIdCliente());

        listaClienteEditando = new LinkedList<Cliente>();
        if (objetoPersona != null) {
        if (objetoPersona.getClienteList() != null) {
            List<Cliente> lista2 = new LinkedList<Cliente>();
            lista2 = objetoPersona.getClienteList();
            for (int i = lista2.size() - 1; i >= 0; i--) {
                if (lista2.get(i).getPerEstado() == true) {
                    listaClienteEditando.add(lista2.get(i));
                }
            }
        }
         }
        return listaClienteEditando;
    }

    public void setListaDetalleclientes(List<Detallecliente> listaDetalleclientes) {
        this.listaDetalleclientes = listaDetalleclientes;
    }

    public Persona getObjetoPersonaCrear() {
        return objetoPersonaCrear;
    }

    public void setObjetoPersonaCrear(Persona objetoPersonaCrear) {
        this.objetoPersonaCrear = objetoPersonaCrear;
    }

    public Persona getObjetoPersonaCrear2() {
        return objetoPersonaCrear2;
    }

    public void setObjetoPersonaCrear2(Persona objetoPersonaCrear2) {
        this.objetoPersonaCrear2 = objetoPersonaCrear2;
    }

    public Cliente getObjetoCliente() {
        return objetoCliente;
    }

    public Persona getObjetoPersona() {
        return objetoPersona;
    }

    public void setObjetoPersona(Persona objetoPersona) {
        this.objetoPersona = objetoPersona;
    }

    public Cliente getObjetoCliente(int id) {
        //  System.out.println("yury :"+(Cliente) myobjeto.get(id));
        if ((Cliente) myobjeto.get(id) == null) {
            // cambiar lista para que empiece desde la ultima parte.
            for (int i = lista_clientesTotales.size() - 1; i >= 0; i--) {
                //   System.out.println("jojojojo1 " + lista_clientesTotales.get(i).getIdCliente() +" VS"+id);
                if (lista_clientesTotales.get(i).getIdCliente().equals(id)) {
                    //System.out.println("ENCONTRADO !");
                    return lista_clientesTotales.get(i);
                }
            }
        }
        return (Cliente) myobjeto.get(id);
    }

    public Cliente getObjetoCliente2(int id) {
        return (Cliente) myobjeto2.get(id);
    }
    
    public Cliente getObjetoCliente3(int id) {
        return (Cliente) myobjeto3.get(id);
    }

    public void setObjetoCliente(Cliente objetoCliente) {
        this.objetoCliente = objetoCliente;
    }

    public Cliente getObjetoClienteCrear() {
        return objetoClienteCrear;
    }

    public void setObjetoClienteCrear(Cliente objetoClienteCrear) {
        this.objetoClienteCrear = objetoClienteCrear;
    }

    public List<Cliente> getLista() {
        lista = new LinkedList<Cliente>();
        List<Cliente> listaTemporal = new LinkedList<Cliente>();
        listaTemporal = ClienteFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            // con el filtro length nos aseguramos que entren todas menos  '--'
            if (listaTemporal.get(i).getPerEstado() == true && listaTemporal.get(i).getCliRUC().length()>2) {
                lista.add(listaTemporal.get(i));
            }
        }

        return lista;
    }

    public void setLista(List<Cliente> lista) {
        this.lista = lista;
    }

    public List<Persona> getListaNatural() {
        listaNatural = new LinkedList<Persona>();
        List<Persona> listaTemporal1 = new LinkedList<Persona>();
        listaTemporal1 = PersonaFacade.findAll();
        for (int i = listaTemporal1.size() - 1; i >= 0; i--) {
            if (listaTemporal1.get(i).getPerEstado() == true && listaTemporal1.get(i).getPerTipo() == 1) {
                listaNatural.add(listaTemporal1.get(i));
            }
        }
        return listaNatural;
    }

    public void setListaNatural(List<Persona> listaNatural) {
        this.listaNatural = listaNatural;
    }

    public HashMap<Integer, Cliente> getMyobjeto() {
        return myobjeto;
    }

    public void setMyobjeto(HashMap<Integer, Cliente> myobjeto) {
        this.myobjeto = myobjeto;
    }

    public void agregando() {
        try {
            objetoDetallecliente.setDcliEstado(true);
            objetoDetallecliente.setCliente(objetoClienteCrear);

            listaDetalleclientes.add(objetoDetallecliente);
            objetoDetallecliente = new Detallecliente();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void agregandonuevo() {
        try {
            if (objetoDetalleclienteCrear.getDcliDireccion().equalsIgnoreCase("") && objetoDetalleclienteCrear.getDcliEmail().equalsIgnoreCase("") && objetoDetalleclienteCrear.getDcliCelular().equalsIgnoreCase("") && objetoDetalleclienteCrear.getDcliTelefono().equalsIgnoreCase("")) {
                FacesMessage msg = new FacesMessage("Informacion", "Ingresa algun valor");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            } else {

                objetoDetalleclienteCrear.setDcliEstado(true);
                objetoDetalleclienteCrear.setCliente(objetoCliente);
                //detalleclienteFacade.create(objetoDetalleclienteCrear);

                objetoCliente.getDetalleclienteList().add(objetoDetalleclienteCrear);
                ClienteFacade.edit(objetoCliente);
                objetoDetalleclienteCrear = new Detallecliente();
                FacesMessage msg = new FacesMessage("Informacion", "Los Datos se registraron correctamente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void agregandodetalle() {
        try {
            if (objetoClienteCrear.getCliRUC().equalsIgnoreCase("") && objetoClienteCrear.getCliRazSoc().equalsIgnoreCase("") && objetoClienteCrear.getCliDireccionFiscal().equalsIgnoreCase("")) {
                FacesMessage msg = new FacesMessage("Informacion", "Ingresa algun valor");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            } else {

                objetoClienteCrear.setPerEstado(true);
                objetoClienteCrear.setPersona(objetoPersona);
                //detalleclienteFacade.create(objetoDetalleclienteCrear);
                objetoPersona.getClienteList().add(objetoClienteCrear);
                PersonaFacade.edit(objetoPersona);
                objetoClienteCrear = new Cliente();
                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editando() {
        System.out.println("editando");
        //  return "formClienteJuridicoEdit";
    }

    public void insertarJuridicoMantenedor() {
        try {

            if (!verificarSiexiste(objetoClienteCrear.getCliRUC())) {

                //  PersonaFacade.create(objetoPersona);
                // aqui seteamos nueva persona
                // ID 1 solo para empresas
                // vamos a buscar persona desde la interface.

                // esto viene desde su mantenedor
                objetoClienteCrear.setPersona(objetoClientePersona.getPersona());

                objetoClienteCrear.setDetalleclienteList(listaDetalleclientes);
                objetoClienteCrear.setPerEstado(true);

                ClienteFacade.create(objetoClienteCrear);
                lista_clientesTotales.add(objetoClienteCrear);

                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado Con Exito");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoClienteCrear = new Cliente();
                listaDetalleclientes = new LinkedList<Detallecliente>();
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarJuridico(ManagedBeanVenta v) {
        try {
            System.out.println("pasara ?");
            if (!verificarSiexiste(objetoClienteCrear.getCliRUC())) {
                System.out.println("si");
                //  PersonaFacade.create(objetoPersona);
                // aqui seteamos nueva persona
                // ID 1 solo para empresas
                // vamos a buscar persona desde la interface.


                if (objetoClienteCrear.getCliRUC().trim().equals("")) {
                    objetoClienteCrear.setCliRUC("--");
                }

                if (objetoClienteCrear.getCliRUC().trim().equals("")) {
                    objetoClienteCrear.setCliRUC("--");
                }

                if (objetoClienteCrear.getCliDireccionFiscal().trim().equals("")) {
                    objetoClienteCrear.setCliRUC("--");
                }

                objetoClienteCrear.setPersona(objetoClientePersona.getPersona());

                objetoClienteCrear.setDetalleclienteList(listaDetalleclientes);
                objetoClienteCrear.setPerEstado(true);

                ClienteFacade.create(objetoClienteCrear);

                lista_clientesTotales.add(objetoClienteCrear);
                System.out.println("el tipo es : " + objetoClienteCrear);
                System.out.println("llego");
                v.getObjetoVentas().setCliente(objetoClienteCrear);
                System.out.println("bien");

                v.setObjetoCliente(objetoClienteCrear);
                v.getObjetoVentas().setVenNroDocumento(objetoClienteCrear.getPersona().getPerDNI());

                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado Con Exito");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoClienteCrear = new Cliente();
                listaDetalleclientes = new LinkedList<Detallecliente>();
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarJuridico2(ManagedBeanEncomienda enc) { //Para insertar desde managedbean Encomienda
        try {
            System.out.println("pasara ?");
            if (!verificarSiexiste(objetoClienteCrear.getCliRUC())) {
                System.out.println("si");
                //  PersonaFacade.create(objetoPersona);
                // aqui seteamos nueva persona
                // ID 1 solo para empresas
                // vamos a buscar persona desde la interface.

                objetoClienteCrear.setPersona(objetoClientePersona.getPersona());

                objetoClienteCrear.setDetalleclienteList(listaDetalleclientes);
                objetoClienteCrear.setPerEstado(true);

                ClienteFacade.create(objetoClienteCrear);

                lista_clientesTotales.add(objetoClienteCrear);
                System.out.println("el tipo es : " + objetoClienteCrear);
                System.out.println("llego");
                enc.setObjetoCliente(objetoClienteCrear);
//      v.getObjetoVentas().setCliente(objetoClienteCrear);
                System.out.println("bien");

//      v.setObjetoCliente(objetoClienteCrear);
//      v.getObjetoVentas().setVenNroDocumento(objetoClienteCrear.getPersona().getPerDNI());

                FacesMessage msg = new FacesMessage("Informacion", "Registro Ingresado Con Exito");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoClienteCrear = new Cliente();
                listaDetalleclientes = new LinkedList<Detallecliente>();
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarNaturalMantenedor() {
        try {
            if (!verificarSiexisteNatural(objetoPersonaCrear.getPerDNI())) {
                objetoPersonaCrear.setPerEstado(true);
                objetoPersonaCrear.setPerFechaCreacion(new Date());
                objetoPersonaCrear.setPerTipo(1);

                PersonaFacade.create(objetoPersonaCrear);
//                if (objetoClienteCrear.getCliRUC().equalsIgnoreCase("")) {
//                    FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado");
//                    FacesContext.getCurrentInstance().addMessage(null, msg);
//                    objetoPersonaCrear = new Persona();
//                } else {
                objetoClienteCrear.setPersona(objetoPersonaCrear);
                objetoClienteCrear.setPerEstado(true);

                // cuando creamos a una persona le mandamos con -- a los datos de ese cliente.
                objetoClienteCrear.setCliRUC("--");
                objetoClienteCrear.setCliRazSoc("--");
                objetoClienteCrear.setCliDireccionFiscal("--");
                ClienteFacade.create(objetoClienteCrear);
                lista_clientesTotales.add(objetoClienteCrear);
                objetoClienteCrear = new Cliente();

                FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoPersonaCrear = new Persona();
//                }
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarNatural(ManagedBeanVenta v) {
        try {
            if (!verificarSiexisteNatural(objetoPersonaCrear.getPerDNI())) {
                objetoPersonaCrear.setPerEstado(true);
                objetoPersonaCrear.setPerFechaCreacion(new Date());
                objetoPersonaCrear.setPerTipo(1);

                PersonaFacade.create(objetoPersonaCrear);
//                if (objetoClienteCrear.getCliRUC().equalsIgnoreCase("")) {
//                    FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado");
//                    FacesContext.getCurrentInstance().addMessage(null, msg);
//                    objetoPersonaCrear = new Persona();
//                } else {
                objetoClienteCrear.setPersona(objetoPersonaCrear);
                objetoClienteCrear.setPerEstado(true);

                // cuando creamos a una persona le mandamos con -- a los datos de ese cliente.
                objetoClienteCrear.setCliRUC("--");
                objetoClienteCrear.setCliRazSoc("--");
                objetoClienteCrear.setCliDireccionFiscal("--");
                ClienteFacade.create(objetoClienteCrear);


                lista_clientesTotales.add(objetoClienteCrear);
                System.out.println("el tipo es : " + objetoClienteCrear);
                System.out.println("llego");
                v.getObjetoVentas().setCliente(objetoClienteCrear);
                System.out.println("bien");

                v.setObjetoCliente(objetoClienteCrear);
                v.getObjetoVentas().setVenNroDocumento(objetoClienteCrear.getPersona().getPerDNI());


                

                FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado con exito");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoClienteCrear = new Cliente();
                objetoPersonaCrear = new Persona();
//                }
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void insertarNatural2(ManagedBeanEncomienda enc) {//para poder insertar desde managedBean encomiendas
        System.out.println("fdfdfdfdf en clieten 2");
        System.out.println("sin dni: " + sindni);
        System.out.println("ojetopersonacrear: " + objetoPersonaCrear.getPerDNI());
        try {
            if (sindni == false) {
                if (objetoPersonaCrear.getPerDNI().equals("")) {
                    FacesMessage msg = new FacesMessage("Informacion", "Ingrese el DNI");
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                    return;
                }
            }
            
            System.out.println("funcion: "+verificarSiexisteNatural(objetoPersonaCrear.getPerDNI()));

            if (!verificarSiexisteNatural(objetoPersonaCrear.getPerDNI())) {
                objetoPersonaCrear.setPerEstado(true);
                objetoPersonaCrear.setPerFechaCreacion(new Date());
                objetoPersonaCrear.setPerTipo(1);
                PersonaFacade.create(objetoPersonaCrear);
                objetoClienteCrear.setPersona(objetoPersonaCrear);
                sindni = false;//regresamoso a su valor normal para que no se quede con el valor true
//                if (objetoClienteCrear.getCliRUC().equalsIgnoreCase("")) {
//                    FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado");
//                    FacesContext.getCurrentInstance().addMessage(null, msg);
//                    objetoPersonaCrear = new Persona();
//                } else {

                objetoClienteCrear.setPerEstado(true);

                // cuando creamos a una persona le mandamos con -- a los datos de ese cliente.
                objetoClienteCrear.setCliRUC("--");
                objetoClienteCrear.setCliRazSoc("--");
                objetoClienteCrear.setCliDireccionFiscal("--");
                ClienteFacade.create(objetoClienteCrear);


                lista_clientesTotales.add(objetoClienteCrear);
                System.out.println("el tipo es : " + objetoClienteCrear);
                System.out.println("llego");
                enc.setObjetoCliente(objetoClienteCrear);
//      v.getObjetoVentas().setCliente(objetoClienteCrear);
                System.out.println("bien");

//      v.setObjetoCliente(objetoClienteCrear);
//      v.getObjetoVentas().setVenNroDocumento(objetoClienteCrear.getPersona().getPerDNI());


                objetoClienteCrear = new Cliente();

                FacesMessage msg = new FacesMessage("Informacion", "Registro Persona Ingresado");
                FacesContext.getCurrentInstance().addMessage(null, msg);
                objetoPersonaCrear = new Persona();
//                }
            } else {
                FacesMessage msg = new FacesMessage("Informacion", "Ya Existe Cliente");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editar() {
        try {
            PersonaFacade.edit(objetoPersona);
            ClienteFacade.edit(objetoCliente);
            PersonaFacade.edit(objetoCliente.getPersona());
            lista_clientesTotales = new LinkedList<Cliente>();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void editarjuridico() {
        try {
            for (Detallecliente de : objetoCliente.getDetalleclienteList()) {
                System.out.println("detatalle direccion " + de.getDcliDireccion() + " celular" + de.getDcliDireccion());
            }

            for (Detallecliente de : listaDetalleclientesEditando) {
                System.out.println("NUEVO detatalle direccion " + de.getDcliDireccion() + " celular" + de.getDcliDireccion());
            }
            objetoCliente.setDetalleclienteList(listaDetalleclientesEditando);
            ClienteFacade.edit(objetoCliente);
            lista_clientesTotales = new LinkedList<Cliente>();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminar() {
        try {
            objetoPersona.setPerEstado(false);
            objetoCliente.setPerEstado(false);
            ClienteFacade.edit(objetoCliente);
            PersonaFacade.edit(objetoPersona);
            lista_clientesTotales = new LinkedList<Cliente>();
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Cliente Seleccionado", ((Cliente) event.getObject()).getIdCliente().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselect(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Cliente No seleccionado", ((Cliente) event.getObject()).getIdCliente().toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowSelectNatural(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Cliente Seleccionado", ((Persona) event.getObject()).getIdPersona().toString());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onRowUnselectNatural(UnselectEvent event) {
        FacesMessage msg = new FacesMessage("Cliente No seleccionado", ((Persona) event.getObject()).getIdPersona().toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public boolean verificarSiexiste(String desc) {
        boolean existe = false;
        lista = new LinkedList<Cliente>();
        List<Cliente> listaTemporal = new LinkedList<Cliente>();
        listaTemporal = ClienteFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            // la validacion tiene que ser con la combinacion cliente vs ruc. de esta forma me deja ingresar multiples clientes con un mismo ruc
            if (listaTemporal.get(i).getPersona().getPerDNI().equalsIgnoreCase(objetoClientePersona.getPersona().getPerDNI()) && listaTemporal.get(i).getCliRUC().equalsIgnoreCase(desc.trim()) && listaTemporal.get(i).getPerEstado() == true) {
                existe = true;
            }
        }

        return existe;
    }

    public boolean verificarSiexisteNatural(String desc) {
        boolean existe = false;
        lista = new LinkedList<Cliente>();
        List<Cliente> listaTemporal = new LinkedList<Cliente>();
        listaTemporal = ClienteFacade.findAll();
        for (int i = listaTemporal.size() - 1; i >= 0; i--) {
            if (listaTemporal.get(i).getPersona().getPerDNI().equalsIgnoreCase(desc) && listaTemporal.get(i).getPerEstado() == true) {
                existe = true;
            }
        }
        if (sindni == true) {//cuando insertamos un cliente sin dni debe dejarme pasar;
            existe = false;
            objetoPersonaCrear.setPerDNI("-");
            System.out.println("mm mm qqq");
        }
        return existe;
    }

    public void onCellEdit(CellEditEvent event, int iddetcli, int idcli, String dcliDireccion, String tel, String dcliCelular, String email) {
        try {
            objetoDetalleclienteEditar = new Detallecliente();
            objetoDetalleclienteEditar.setIdDetalleCliente(iddetcli);
            objetoDetalleclienteEditar.setCliente(new Cliente(idcli));
            objetoDetalleclienteEditar.setDcliCelular(dcliCelular);
            objetoDetalleclienteEditar.setDcliDireccion(dcliDireccion);
            objetoDetalleclienteEditar.setDcliEmail(email);
            objetoDetalleclienteEditar.setDcliEstado(Boolean.TRUE);
            objetoDetalleclienteEditar.setDcliTelefono(tel);
            detalleclienteFacade.edit(objetoDetalleclienteEditar);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onCellEditar(CellEditEvent event, int idCli, int idPer, String cliRUC, String cliRazonSocial, String cliDireccion, Boolean emp) {
        try {
            objetoClienteEditar = new Cliente();
            objetoClienteEditar.setIdCliente(idCli);
            objetoClienteEditar.setPersona(new Persona(idPer));
            objetoClienteEditar.setCliRUC(cliRUC);
            objetoClienteEditar.setCliRazSoc(cliRazonSocial);
            objetoClienteEditar.setCliDireccionFiscal(cliDireccion);
            objetoClienteEditar.setPerEmpresaAsociada(emp);
            objetoClienteEditar.setPerEstado(Boolean.TRUE);
            ClienteFacade.edit(objetoClienteEditar);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminarDetalleJuridico() {
        try {
            objetoDetallecliente.setDcliEstado(Boolean.FALSE);
            detalleclienteFacade.edit(objetoDetallecliente);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void eliminarCliente() {
        try {
            objetoCliente.setPerEstado(Boolean.FALSE);
            ClienteFacade.edit(objetoCliente);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void filtrarClientes2() {
        System.out.println("nos llega esto" + personaNatural2);


        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
        System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
            System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems2 = new LinkedList<SelectItem>();
        myobjeto2 = new HashMap<Integer, Cliente>();
        for (Cliente p : lista_clientesTotales) {
            if (p.getPerEstado() == true) {


                if (personaNatural2 == Boolean.TRUE) {
                    if (p.getPersona().getIdPersona().equals(1) == false) {
                        // SOLO PERSONAS
                        myobjeto2.put(p.getIdCliente(), p);
                        objetoItems2.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));
                        // System.out.println("hay :"+objetoItems.size()+" Personas");
                    }
                } else {
                    // SOLO EMPRESAS
                    myobjeto2.put(p.getIdCliente(), p);
                    objetoItems2.add(new SelectItem(p, p.getCliRUC() + " " + p.getCliRazSoc()));

                }

            }
        }

        if (personaNatural2 == Boolean.TRUE) {
            System.out.println("hay :" + objetoItems2.size() + "Personas");
        } else {
            // SOLO EMPRESAS
            System.out.println("hay :" + objetoItems2.size() + "Empresas");
        }


        System.out.println("Salio muy bien");
    }

    public List<Cliente> completar_filtrado_Clientes2(String nombre) {
        List<Cliente> lista_clientes = new LinkedList<Cliente>();
        //    System.out.println("si entro con "+nombre +" "+ lista_clientesTotales.size()+ " clientes" );
        List<Cliente> lista_clientesTemp = new LinkedList<Cliente>();
        // vamos a comparar la lista antes de leerla
        lista_clientesTemp = ClienteFacade.findAll();
        System.out.println("jojo1     " + lista_clientesTotales.size() + " con el nombre 1 ");

        // ESTO ES SOLO PARA VALIDAR DE QUE NO ESTE A CADA RATO PREGUNTANDO 
        if (lista_clientesTotales.size() < 1) {
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = ClienteFacade.findAll();
        }

        if (lista_clientesTotales.size() < lista_clientesTemp.size()) {
            System.out.println("VAMOS A ACTUALIZAR");
            lista_clientesTotales = new LinkedList<Cliente>();
            lista_clientesTotales = lista_clientesTemp;
        }


        objetoItems3 = new LinkedList<SelectItem>();
        myobjeto3 = new HashMap<Integer, Cliente>();

        for (Cliente p : lista_clientesTotales) {
            //    System.out.println(p.getPersona().getPerNombres()+"yury " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);
            System.out.println("tmr" + p);
            if (personaNatural2 == Boolean.TRUE) {
                //                  System.out.println(p.getPersona().getPerNombres()+" PERSONAS  DNI" +p.getPersona().getPerDNI()  +" VS "+nombre);

                if (p.getPersona().getIdPersona().equals(1) == false) {
                    // SOLO PERSONAS
                    String nombapell = p.getPersona().getPerApellidos() + " " + p.getPersona().getPerNombres();
                    if ((p.getPersona().getPerDNI().indexOf(nombre.toUpperCase().trim()) != -1 || nombapell.toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1) && p.getCliRUC().length() < 3) {
                        lista_clientes.add(p);
                        myobjeto3.put(p.getIdCliente(), p);
                        objetoItems3.add(new SelectItem(p, p.getPersona().getPerDNI() + " " + p.getPersona().getPerNombres() + " " + p.getPersona().getPerApellidos()));

                    }
                    System.out.println("Si agrego Personas ! Existen :" + lista_clientes.size());
                }
            } else {
                //  System.out.println(p.getPersona().getPerNombres()+"EMPRESAS " +p.getCliRUC() +" rz "+p.getCliRazSoc() +" VS "+nombre);

                // SOLO EMPRESAS
                String nombapell = p.getPersona().getPerApellidos() + " " + p.getPersona().getPerNombres();
                if (((p.getPersona().getPerDNI().indexOf(nombre.toUpperCase().trim()) != -1) || (p.getCliRUC().toUpperCase().indexOf(nombre.toUpperCase().trim())) != -1 || nombapell.toUpperCase().indexOf(nombre.toUpperCase().trim()) != -1) && p.getCliRUC().length() > 3) {
                    lista_clientes.add(p);

                    myobjeto3.put(p.getIdCliente(), p);
                    objetoItems3.add(new SelectItem(p, p.getCliRUC() + " " + p.getCliRazSoc()));

                }
                System.out.println("Si agrego EMPRESAS ! Existen :" + lista_clientes.size());
            }


        }
        return lista_clientes;
    }
}